#!/usr/bin/env sh

#
# Дата создания: 15.03.2007
# Автор: passshok@gmail.com
#
# Описание: Программа установки и удаления файлов.
#
# Лицензия: GPLv2/GPLv3
#


# Необходимые программы
progs="dialog mc tempfile install"

# Объявление переменных с путями установки
inst_exec_dir="$HOME/bin"
locl_exec_dir="./bin"

# Настройки конфигурации
use_email=n
use_bluetooth=n
use_umount=n
use_mount_udev=n


chkprogs()
{
    # Если передана строка с названиями программ, то работаем с ней,
    # иначе - проверяем программы из общего списка
    [[ $# -ne 0 ]] && progs=$*

    for prog in `echo $progs`; do
        which $prog > /dev/null
        if [[ $? -ne 0 ]]
        then
            echo "Программа '$prog' не установлена. Установите ее."
            return 10
        fi
    done
    return 0
}

configure()
{
    tmp=`tempfile`
    dialog --clear \
        --separate-output \
        --cancel-label 'Отмена' \
        --title 'Выбор компонентов' \
        --checklist 'Выберите необходимые вам компоненты. Для выхода нажмите Esc.' 20 61 12 \
        Email 'Отправка файлов по почте' on \
        Bluetooth 'Отправка файлов через bluetooth' on \
        Umount 'Извлечение сменных носителей' on \
        Automount 'Авто. монтирование сменных носителей' on \
        2> $tmp
    res=$?

    [ "$res" -ne 0 ] && return 10
    grep -q Email $tmp && use_email=y
    grep -q Bluetooth $tmp && use_bluetooth=y
    grep -q Umount $tmp && use_umount=y
    grep -q Automount $tmp && use_mount_udev=y
    rm $tmp

    [ "$use_email" = "y" ]      && { chkprogs python || exit 1; } 
    [ "$use_bluetooth" = "y" ]  && { chkprogs hcitool awk obexftp || exit 1; } 
    [ "$use_mount_udev" = "y" ] && { chkprogs udevinfo sudo || exit 1; } 

    if [ "$use_email" = 'y' -a ! -e "$HOME/.sendmail2" ]
    then
        q1="Логин для входа на smtp-сервер"
        q2="Пароль для входа на smtp-сервер"
        q3="Адрес smtp-сервера"
        q4="Порт сервера (обычно 25)"
        q5="Имя почтового ящика на данном сервере"
        str=""
        t=""
        for i in 1 2 3 4 5
        do
            eval r=\$q$i
            t="--inputbox"
            [ "$i" = 2 ] && t="--passwordbox"
            dialog --title 'Настройка параметров' $t "$r" 10 40 2> $tmp
            res=$?
            [[ $res ]] || return 20
            str="$str::`cat $tmp`"
        done
        rm $tmp
        str=${str:2}
        echo $str > $HOME/.sendmail2
        chmod 600 $HOME/.sendmail2
    fi
    return 0
}

patchmenu()
{
    if [ ! -e "$HOME/.mc/menu" ]
    then
        mc_menu_file=""
        [ -e "/usr/share/mc/mc.menu" ] && mc_menu_file="/usr/share/mc/mc.menu"
        [ -e "/etc/mc/mc.menu" ] && mc_menu_file="/etc/mc/mc.menu"

        if [ -n "$mc_menu_file" ]
        then
            mkdir -p $HOME/.mc/
            cp $mc_menu_file $HOME/.mc/menu
        else
            echo "Не найден общесистемный файл меню Midnight Commander"
            return 10
        fi
    fi
    tmp=`tempfile`
    lines=`cat $HOME/.mc/menu | wc -l`
    lines=`expr $lines - 1`
    head -n 1 $HOME/.mc/menu >> $tmp
    [ "$use_email" = "y" ]     && cat ./menu.sendmail >> $tmp
    [ "$use_bluetooth" = "y" ] && cat ./menu.bluetooth >> $tmp
    [ "$use_umount" = "y" ]    && cat ./menu.umount >> $tmp
    tail -n $lines $HOME/.mc/menu >> $tmp
    mv $HOME/.mc/menu $HOME/.mc/menu.bak
    mv $tmp $HOME/.mc/menu
    return 0
}

unpatchmenu()
{
    mv $HOME/.mc/menu.bak $HOME/.mc/menu
}

install_all()
{
    doc_str=""

    chkprogs
    if [ "$?" -ne 0 ]
    then
        echo "Не найдены необходимые программы. Установка прервана."
        exit 1
    fi
    configure
    if [ "$?" -ne 0 ]
    then
        echo "Конфигурирование не удалась. Установка прервана."
        exit 2
    fi
    patchmenu
    if [ "$?" -ne 0 ]
    then
        echo "Ошибка изменения файла меню MC. Установка прервана."
        exit 3
    fi

    [ ! -d $inst_exec_dir ] && mkdir $inst_exec_dir
    if [ "$use_email" = "y" ]
    then
        install -m 0755 $locl_exec_dir/mc-sendmail.sh $inst_exec_dir
        install -m 0755 $locl_exec_dir/sendfile.py $inst_exec_dir
        doc_str="${doc_str}m - если хотите отправить файл по почте\n"
    fi
    if [ "$use_bluetooth" = "y" ]
    then
        install -m 0755 $locl_exec_dir/mc-bluetooth.sh $inst_exec_dir
        doc_str="${doc_str}b - если хотите отправить файл по bluetooth\n"
    fi
    if [ "$use_umount" = "y" ]
    then
        install -m 0755 $locl_exec_dir/mc-umount.sh $inst_exec_dir
        doc_str="${doc_str}u - если хотите извлечь смонтированные устройства\n"
    fi
    if [ "$use_mount_udev" = "y" ]
    then
        install -m 0755 $locl_exec_dir/automount-udev.sh $inst_exec_dir
        tmp=`tempfile`
        sed s/%username%/`id -un`/ ./udev/40-automount.rules | sed s:%userhome%:$HOME: > $tmp
        echo "Введите пароль пользователя root для установки правил udev в системный каталог"
        su -c "mv $tmp /etc/udev/rules.d/40-automount.rules"
    fi

    dialog --msgbox \
        "Установка успешно завершена.\n\nДля начала работы выберите файл в \
Midnight Commander, нажмите F2, а затем:\n${doc_str}\n\nДополнительную информацию можно найти в README файле." \
        14 61
}

uninstall()
{
    unpatchmenu
    [ -e "$inst_exec_dir/mc-sendmail.sh" ]  && rm $inst_exec_dir/mc-sendmail.sh
    [ -e "$inst_exec_dir/sendfile.py" ]    && rm $inst_exec_dir/sendfile.py
    [ -e "$inst_exec_dir/mc-bluetooth.sh" ] && rm $inst_exec_dir/mc-bluetooth.sh
    [ -e "$inst_exec_dir/mc-umount.sh" ]    && rm $inst_exec_dir/mc-umount.sh
    if [ -e "/etc/udev/rules.d/40-automount.rules" ]
    then
        echo "Введите пароль пользователя root для удаления правил udev"
        su -c "rm /etc/udev/rules.d/40-automount.rules"
    fi
}


[ "$#" -eq 0 ] && { echo "usage: `basename $0` install | uninstall"; exit; };
[ "$1" = "install" ]   && { install_all; exit; };
[ "$1" = "uninstall" ] && { uninstall; exit; };
